/*
 * @(#)MenuController.java v2.0 2016年11月22日
 * 百联集团	版权所有
 * 
 * 文件描述...
 *
 * @Title: MenuController.java 
 * @Package com.bailiangroup.gsp.oms.controller 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0
 * 历史版本：
 * 	1. 【2016年11月22日】 创建文件   by tylong
 */
package com.ess.web.controller.menu;


import com.bailian.pagehelper.PageInfo;
import com.blgroup.b2b.common.constant.SysMessage;
import com.blgroup.b2b.common.entity.MessageResultInfo;
import com.blgroup.b2b.common.model.Menu;
import com.blgroup.b2b.web.dto.AddMenuReqDto;
import com.blgroup.b2b.web.dto.DeleteMenuReqDto;
import com.blgroup.b2b.web.dto.QueryMenuReqDto;
import com.blgroup.b2b.web.dto.UpdateMenuReqDto;
import com.blgroup.b2b.web.service.sys.MenuService;
import com.blgroup.b2b.web.util.BeanUtils;
import com.ess.web.controller.base.BaseController;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

/**
 * 菜单Controller
 *
 * @author tylong
 * @version v2.0
 * @ClassName: MenuController
 * @date 2016年11月22日 下午11:35:41
 */
@Controller
@RequestMapping(value = "/sys")
public class MenuController extends BaseController {

    /**
     * 日志变量
     */
    static final Logger logger = LoggerFactory.getLogger(MenuController.class);
    /**
     * 菜单service
     */
    @Autowired
    MenuService menuService;

    /**
     * 方法描述：   删除菜单
     * 业务逻辑说明  ：删除菜单
     * 1、根据唯一主键删除<br/>
     *
     * @param request
     * @param response
     * @param dto
     * @return
     * @Title: deleteMenu
     * @date 2016年11月22日 下午8:31:28
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequiresPermissions("menu:deleteMenu")
    @RequestMapping(value = "/deleteMenu", method = RequestMethod.POST)
    public Object deleteMenu(@Valid @ModelAttribute("dto") DeleteMenuReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
        MessageResultInfo resultInfo = new MessageResultInfo();
        try {
            //删除菜单
            resultInfo = menuService.deleteMenu(dto);
        } catch (Exception e) {
            logger.error("删除菜单失败", e);
            resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
            resultInfo.setResultMsg("删除菜单失败");
        }
        return resultInfo;
    }

    /**
     * 方法描述：   添加菜单
     * 业务逻辑说明  ：添加菜单
     * 1、参数校验<br/>
     *
     * @param request
     * @param response
     * @param dto
     * @return
     * @Title: addMenu
     * @date 2016年11月22日 下午8:32:18
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequiresPermissions("menu:toMenuAdd")
    @RequestMapping(value = "/addMenu", method = RequestMethod.POST)
    public Object addMenu(@Valid @ModelAttribute("dto") AddMenuReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
        MessageResultInfo resultInfo = new MessageResultInfo();
        try {
            BeanUtils.convertEmptyStringToNull(dto);
            dto.setCreateUser(request.getSession().getAttribute("userId").toString());
            resultInfo = menuService.addMenu(dto);
        } catch (Exception e) {
            logger.error("新增菜单失败", e);
            resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
            resultInfo.setResultMsg("新增菜单失败");
        }
        return resultInfo;
    }

    /**
     * 方法描述：   更新菜单
     * 业务逻辑说明  ：更新菜单
     * 1、参数校验<br/>
     * 2、字典值不可更改<br/>
     *
     * @param request
     * @param response
     * @param dto
     * @return
     * @Title: updateMenu
     * @date 2016年11月22日 下午8:33:19
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequiresPermissions("menu:toMenuAdd")
    @RequestMapping(value = "/updateMenu", method = RequestMethod.POST)
    public Object updateMenu(@Valid @ModelAttribute("dto") UpdateMenuReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
        MessageResultInfo resultInfo = new MessageResultInfo();
        try {
            dto.setUpdateUser(request.getSession().getAttribute("userId").toString());
            resultInfo = menuService.updateMenu(dto);
        } catch (Exception e) {
            logger.error("更新菜单失败", e);
            resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
            resultInfo.setResultMsg("更新菜单失败");
        }
        return resultInfo;
    }

    /**
     * 方法描述：   查询菜单列表
     * 业务逻辑说明  ：查询菜单列表
     *
     * @param model
     * @param dto
     * @param result
     * @param request
     * @return
     * @Title: queryMenu
     * @date 2016年12月2日 下午6:04:48
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequiresPermissions("menu:queryMenu")
    @RequestMapping(value = "/queryMenu", method = RequestMethod.GET)
    public ModelAndView queryMenu(@Valid @ModelAttribute("dto") QueryMenuReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
        //查询用户列表
        ModelAndView mv = new ModelAndView("sys/menuList");
        try {
            if (StringUtils.isEmpty(dto.getOrderBy())) {
                dto.setOrderBy("UPDATE_DATE desc ");
            }
            BeanUtils.convertEmptyStringToNull(dto);
            PageInfo<Menu> pageInfo = menuService.queryMenu(dto);
            //convertUserIdToUserName(pageInfo.getList());
            model.addAttribute("pageInfo", pageInfo);
            mv.addObject("tabId", "queryMenu");
            mv.addObject(pageInfo);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return mv;
    }

    /**
     * 方法描述：   查询菜单列表
     * 业务逻辑说明  ：查询菜单列表
     *
     * @param model
     * @param dto
     * @param result
     * @param request
     * @return
     * @Title: queryMenu
     * @date 2016年12月2日 下午6:04:48
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequestMapping(value = "/queryMenuAjax", method = RequestMethod.POST)
    @ResponseBody
    public Object queryMenuAjax(@Valid @ModelAttribute("dto") QueryMenuReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
        //查询用户列表
        PageInfo<Menu> pageInfo = new PageInfo<Menu>();
        try {
            BeanUtils.convertEmptyStringToNull(dto);
            dto.setOrderBy("MENU_SORT desc");
            dto.setIsPage("0");
            if (dto.getLoadAll()) {
                //加载所有菜单
            } else {
                if (StringUtils.isEmpty(dto.getParentSid())) {
                    dto.setMenuLevel("1");//只加载顶级
                }
            }
            pageInfo = menuService.queryMenu(dto);
            if (null != pageInfo.getList()) {
                for (Menu menu : pageInfo.getList()) {
                    menu.setpId(menu.getParentSid());
                }
            }
            return pageInfo;
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return pageInfo;
    }

    /**
     * 方法描述：   跳转添加菜单页面
     * 业务逻辑说明  ：跳转添加菜单页面
     *
     * @param model
     * @param dto
     * @param result
     * @param request
     * @return
     * @Title: queryUserById
     * @date 2016年12月2日 下午6:04:48
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequiresPermissions("menu:toMenuAdd")
    @RequestMapping(value = "/toMenuAdd", method = RequestMethod.GET)
    public ModelAndView toMenuAdd(@ModelAttribute("dto") AddMenuReqDto dto, HttpServletRequest request) {
        // 跳转添加菜单页面
        ModelAndView mv = new ModelAndView("sys/menuAdd");
        mv.addObject("tabId", "menuAdd");
        return mv;
    }

    /**
     * 方法描述：   跳转编辑菜单页面
     * 业务逻辑说明  ：跳转编辑菜单页面
     *
     * @param model
     * @param dto
     * @param result
     * @param request
     * @return
     * @Title: toMenuUpdate
     * @date 2016年12月2日 下午6:04:48
     * @author tylong
     * @modifier
     * @modifydate
     */
    @RequiresPermissions("menu:toMenuAdd")
    @RequestMapping(value = "/toMenuUpdate", method = RequestMethod.GET)
    public ModelAndView toMenuUpdate(@ModelAttribute("dto") QueryMenuReqDto dto, HttpServletRequest request) {
        // 跳转编辑菜单页面
        ModelAndView mv = new ModelAndView("sys/menuUpdate");
        try {
            BeanUtils.convertEmptyStringToNull(dto);
            PageInfo<Menu> pageInfo = menuService.queryMenu(dto);
            mv.addObject("tabId", "menuUpdate");
            mv.addObject("dto", pageInfo.getList().get(0));
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return mv;
    }
}
